<?php


namespace app\api\controller\v14;


use app\api\controller\v2\Auth;
use app\common\cachemodel\CouponCode;
use app\common\cachemodel\ZlCouponActive;
use think\Db;
use XznsTools\cache\CacheManage;

class NewYearActiv extends Auth
{
    /**
     * 2020年春节活动领取优惠券
     * param $dt int
     * $dt=>1    除夕   本命报告免费解锁 20张
     * $dt=>2    初一   2020年度运势免费解锁 25张
     * $dt=>3    初二   单月运势免费解锁券 30张
     * $dt=>4    初三   生时校正免费券 30张
     * $dt=>5    初四   日运全年免费解锁 35张
     * $dt=>6    初五   占星地图打包免费解锁 35张
     * $dt=>7    初六   占星课程免费解锁 40张
     * $dt=>8    初七   会员免费解锁券 50张
     * @throws \Exception
     */
    public function getCoupon()
    {
        $dt = input('dt/d', 0);

        $dateArr = [
            1 => [ // 除夕
                'date' => 1579881600, // 活动开始时间戳 2020-01-25 00:00:00
                'end_date' => 1579888800, // 活动结束时间戳 2020-01-25 02:00:00
                'group_id' => 14  // 兑换码组号
            ],
            2 => [ // 初一
                'date' => 1579924800, // 活动开始时间戳 2020-01-25 12:00:00
                'end_date' => 1579968000, // 活动结束时间戳 2020-01-26 00:00:00
                'group_id' => 15  // 兑换码组号
            ],
            3 => [ // 初二
                'date' => 1580011200, // 活动开始时间戳 2020-01-26 12:00:00
                'end_date' => 1580054400, // 活动结束时间戳 2020-01-27 00:00:00
                'group_id' => 16  // 兑换码组号
            ],
            4 => [ // 初三
                'date' => 1580097600, // 活动开始时间戳 2020-01-27 12:00:00
                'end_date' => 1580140800, // 活动结束时间戳 2020-01-28 00:00:00
                'group_id' => 17  // 兑换码组号
            ],
            5 => [ // 初四
                'date' => 1580184000, // 活动开始时间戳 2020-01-28 12:00:00
                'end_date' => 1580227200, // 活动结束时间戳 2020-01-29 00:00:00
                'group_id' => 18  // 兑换码组号
            ],
            6 => [ // 初五
                'date' => 1580270400, // 活动开始时间戳 2020-01-29 12:00:00
                'end_date' => 1580313600, // 活动结束时间戳 2020-01-30 00:00:00
                'group_id' => 19  // 兑换码组号
            ],
            // 7 => [ // 初六
            //     'date' => 1580356800, // 活动开始时间戳 2020-01-30 12:00:00
            //     'end_date' => 1580400000, // 活动结束时间戳 2020-01-31 00:00:00
            //     'group_id' => 67  // 兑换码组号
            // ],
            8 => [ // 初七
                'date' => 1580443200, // 活动开始时间戳 2020-01-31 12:00:00
                'end_date' => 1580486400, // 活动结束时间戳 2020-02-01 00:00:00
                'group_id' => 20  // 兑换码组号
            ],
        ];

        if (!$dt || !isset($dateArr[$dt]))
        {
            return show(config('code.error'), '活动暂未开始');
        }

        $time = time();

        if ($time > $dateArr[$dt]['end_date'])
        {
            return show(config('code.error'), '活动已结束');
        }
        if ($time < $dateArr[$dt]['date'])
        {
            return show(config('code.error'), '活动暂未开始');
        }
        // 获取redis操作对象
        $redis = CacheManage::getInstance()->redisHandler;
        // 获取领取过优惠券的用户
        $giveData = $redis->lRange('new_year:activ_send_uid:' . $dateArr[$dt]['group_id'], 0, -1);
        if (in_array($this->user['id'], $giveData))
        {
            return show(config('code.error'), '已经领过过了');
        }
        // 缓存KEY
        $cacheKey = 'new_year:activ:' . $dateArr[$dt]['group_id'];
        // 获取优惠券剩余数量
        $couponNum = $redis->lLen($cacheKey);
        if ($couponNum)
        {
            $code = $redis->lPop($cacheKey);
            if ($code)
            { // 抢到了优惠券
                $couponCodeModel = new CouponCode();
                $res = $couponCodeModel->codeGet($this->user['id'], $code);
                // 记录领取用户UID
                $redis->lPush('new_year:activ_send_uid:' . $dateArr[$dt]['group_id'], $this->user['id']);
                // 更新领取数量
                $redis->hIncrBy('new_year:activ_send_num', $dateArr[$dt]['group_id'], 1);
                if ($res)
                {
                    $this->giveRecordCacheAdd($this->user, $dateArr[$dt]['group_id'], 2);
                    return show(config('code.success'), '已存放至"我的-卡券中心"');
                } else
                {
                    return show(config('code.error'), '优惠券已空');
                }
            }
        }

        return show(config('code.error'), '优惠券已空');
    }

    public function getActivCoupon()
    {
        $dt = input('dt/d', 0);

        $arr = [
            1 => 2,
            2 => 3,
            3 => 4,
            4 => 5,
            5 => 6,
            6 => 7,
            8 => 8,
        ];

        if (!$dt && !isset($arr[$dt]))
        {
            return show(config('code.error'), '活动暂未开始');
        }

        $couponActiveModel = new ZlCouponActive();

        $res = $couponActiveModel->couponGiveActiv((int)$this->user['id'], $arr[$dt]);

        if ($res)
        {
            $this->giveRecordCacheAdd($this->user, $arr[$dt], 1);
            return show(config('code.success'), '已存放至"我的-卡券中心"');
        } else
        {
            return show(config('code.error'), $couponActiveModel->errorMsg);
        }
    }

    /**
     * 记录领取记录
     * @param array $userinfo
     * @param int $id
     * @param int $type 1活动 2抢
     */
    private function giveRecordCacheAdd(array $userinfo, int $id, int $type = 1)
    {
        $len = 15;
        // 获取redis操作对象
        $redis = CacheManage::getInstance()->redisHandler;

        $cacheKey = '2020year:give:info';
        $num = $redis->lLen($cacheKey);

        if ($num >= $len)
        {
            $redis->rPop($cacheKey);
        }

        $info = [
            'nickname' => $userinfo['nickname'],
            'avatar' => $userinfo['avatar'],
            'id' => $id,
            'type' => $type,
        ];

        $record = json_encode($info);

        $redis->lPush($cacheKey, $record);
    }
}
